class Solution
{
public:
    bool isSubtree(TreeNode* root, TreeNode* subRoot)
    {
        if (isSameTree(root, subRoot))
            return true;
        if (root == nullptr || subRoot == nullptr)
            return false;
        return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
    }
    bool isSameTree(TreeNode* p, TreeNode* q)
    {
        if (p == nullptr && q !=  nullptr )
            return false;
        if (p != nullptr && q == nullptr)
            return false;
        if (!p && !q)
            return true;
        if (p->val != q->val)
            return false;
        return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);            
    }
};